
package actions;

import actions.exceptions.NotConnectedException;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import dao.InexistantEntityException;
import entities.Client;
import gestion.GestionnaireRemote;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * Super classe d'Action permettant de regrouper des éléments communs à toutes les pages.
 * @author Alex
 */
public class MiagetestAction extends ActionSupport
{
    private String message;
    private String page;
    public static final String CLIENT_ID = "clientId";

    /**
     * Permet à Struts de se connecter au serveur d'EJB et permet d'obtenir un Gestionnaire qui va modifier la base de données.
     * @return
     */
    public GestionnaireRemote lookupGestionnaireRemote() {
        try {
            Context c = new InitialContext();
            return (GestionnaireRemote) c.lookup("gestion.GestionnaireRemote");
        } catch (NamingException ne) {
            throw new RuntimeException(ne);
        }
    }

    public void saveSessionClientId(int clientId)
    {
        ActionContext.getContext().getSession().put(CLIENT_ID, clientId);
    }

    public int getSessionClientId() throws NotConnectedException
    {
        Integer clientId = (Integer) ActionContext.getContext().getSession().get(CLIENT_ID);

        if(clientId == null)
            throw new NotConnectedException();

        return clientId;
    }

    public void removeSessionClientId()
    {
        ActionContext.getContext().getSession().remove(CLIENT_ID);
    }

    public String getMessage() {
        return message;
    }

    /**
     * Un message est spécifié selon le bon déroulement d'un traitement ou selon le texte d'une exception
     * @return
     */
    public void setMessage(String message) {
        this.message = message;
    }

    public String getPage() {
        return page;
    }

    /**
     * Permet de choisir la page principale qui va s'afficher dans le gros switch
     * @param page
     */
    public void setPage(String page) {
        this.page = page;
    }

    //Utilisé sur infoSession.jsp
    public String getClientNom() {
        GestionnaireRemote gestionnaire = lookupGestionnaireRemote();
        Integer clientId = (Integer) ActionContext.getContext().getSession().get(CLIENT_ID);

        if(clientId == null)
            return null;

        String clientNom = null;
        try {
            Client client = (Client) gestionnaire.get(Client.class, clientId);
            clientNom = client.getNom();
        } catch (InexistantEntityException ex) {
            setMessage(ex.toString());
        }
        return clientNom;
    }   

}
